package cn.etg.day07;

import java.io.*;
import java.util.Scanner;

/**
 * 使用异常捕获机制完成下述IO操作
 * 编写程序，要求下面的类实现功能:
 * 添加新员工
 * 要求用户输入一个员工信息，格式如下:
 * jackson,25,男,5000
 * 用户输入后需要做下述验证:
 * 要求用户名长度在1-20个字符之间且必须是英文
 * 年龄在0-100之间的整数
 * 性别只能是:"男"或"女"
 * 当发现用户输入有不符合规定时，提醒用户
 * 相关内容输入不符合要求，并要求重新输入。
 * 都输入正确后，将该员工添加到emp.txt文件
 * 的最后一行。
 * 
 * @author Xiloer
 *
 */
public class Test06 {
    public static void main(String[] args) {
        start();
    }
    public static void start() {
        Scanner sc = new Scanner(System.in);
        Emp emp = null;
        while (true) {
            String str = sc.nextLine();
            try {
                emp = newEmp(str);
                break;
            } catch (Exception e) {
                System.out.println(e.getMessage() + "，请重新输入！");
            }
        }
        try {
            inputFile(emp);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    public static Emp newEmp(String str) throws Exception {
        String[] p = str.split(",");

        String name = p[0];
        int age = Integer.parseInt(p[1]);
        String gender = p[2];
        int salary = Integer.parseInt(p[3]);

        if (throwEmp(name, age, gender, salary)) {
            return new Emp(name, age, gender, salary);
        } else {
            return null;
        }
    }
    public static void inputFile(Emp emp) throws IOException {
        FileOutputStream fos = new FileOutputStream("./src/api_homework/day07/emp.txt", true);
        OutputStreamWriter osw = new OutputStreamWriter(fos);
        BufferedWriter bw = new BufferedWriter(osw);
        PrintWriter pw = new PrintWriter(bw, true);
        pw.println(emp.toString());
        pw.close();
    }
    public static boolean throwEmp(String name, int age, String gender, int salary) throws Exception {
        String nameRegex = "[a-zA-Z]{1,20}";
        if (!name.matches(nameRegex)) {
            throw new NameException("用户名不符");
        }
        if (age < 0 || age > 100) {
            throw new AgeException("年龄不符");
        }
        if (!(gender.equals("男") || gender.equals("女"))) {
            throw new GenderException("性别不符");
        }
        return true;
    }
}
class NameException extends Exception {
    public NameException(String message) {
        super(message);
    }
}

class AgeException extends Exception {
    public AgeException(String message) {
        super(message);
    }
}

class GenderException extends Exception {
    public GenderException(String message) {
        super(message);
    }
}
